package com.mchat.user.service;

import com.mchat.user.domain.dto.*;
import com.mchat.user.domain.vo.*;
import io.jsonwebtoken.Claims;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Collection;
import java.util.List;

public interface IUserService {
    /**
     * 获取用户信息
     * @param id 用户id
     * @return 用户信息
     */
    Mono<UserVO> getUser(long id);

    /**
     * 批量获取用户信息
     * @param ids 包含id的集合
     * @return 包含用户信息的集合
     */


    Flux<UserVO>getUsers(List<Long> ids);
    /**
     * 用户注册
     * @return 用户的个人信息
     */
    Mono<LoginUserVO> register(RegisterDTO registerDTO);

    Mono<Long> updateName(long id,String name);
    /**
     * 修改用户信息
     */
    Mono<Long> updateInfo(long id, UserInfoDTO dto);

    /**
     * 更改用户头像
     */

    Mono<Void>updateAvatar(long id,String avatar);
    /**
     * 用户登陆
     * @return 用户个人信息
     */
    Mono<LoginUserVO> login(LoginDTO loginDTO);


    /**
     * 获取当前登陆的用户信息
     */
    Mono<CurrentUserVo> getCurrentUser(Long uid);

    /**
     * 重置密码
     */
    Mono<Long> resetPwd(ResetPwdDTO dto);

    /**
     * 获取新的token
     */
    Mono<String> updateToken(Claims claims);

    /**
     * 查询数据库验证用户是否有效
     */
   Mono<Boolean> validUser(long id,Claims claims);

    /**
     * 更新用户隐私字段
     */
   Mono<Long>updatePrivacy(UserPrivacyDTO dto,long id);

    /**
     * 根据关键字搜索用户名
     */
    public Flux<UserVO> searchUser(String keyWord);
}
